home *** CD-ROM | disk | FTP | other *** search
- ;%%%%%%%%%%%%%%%%%%%%%%%%
- ;script iXdcc
- ;version 1.01
- ;author icN, Chutzpah, fixes by Quietust
- ;email quietust@ircN.org
- ;url http://www.ircN.org
- ;%%%%%%%%%%%%%%%%%%%%%%%%
- on 1:CONNECT { write -c $tp(queue.txt) }
- ctcp 1:XDCC {
- set %pack $remove($3,$chr(35))
- if ((%numpacks == $null) || (%numpacks == 0)) putserv NOTICE $nick :No files offered.
- elseif (%pack > %numpacks) putserv NOTICE $nick :File $b($3) does not exist. /CTCP $me XDCC LIST.
- elseif (($2 == list) && ($3)) {
- set %nopath $nopath(%file [ $+ [ %pack ] ] )
- set %path %file [ $+ [ %pack ] ]
- putserv NOTICE $nick :Pack: %filedesc [ $+ [ %pack ] ]
- putserv NOTICE $nick : $+ $fix(10,Size) File
- putserv NOTICE $nick : $+ $fix(10,$file(%path).size) %nopath
- putserv NOTICE $nick :---------- -------------------------------------------------
- putserv NOTICE $nick : $+ $fix(10,$file(%path).size) 1 file(s) :: %get [ $+ [ %pack ] ] Snags
- unset %nopath %ngets %path
- }
- elseif (($2 == send) || ($2 == get)) {
- if (%pack !isnum) putserv NOTICE $nick :File $b($3) does not exist. /CTCP $me XDCC HELP.
- elseif ($send(0) >= %maxslots) {
- if ($qlen >= %maxqueue) {
- putserv NOTICE $nick :All %maxslots slots are full--queue of %maxqueue is full. Try again later.
- return
- }
- set %qds $read -ns $+ $nick $tp(queue.txt)
- if (%qds == %pack) putserv NOTICE $nick :Queue: Pack %pack is already in your queue. It will be sent as slots open.
- else {
- write $tp(queue.txt) $nick %pack
- putserv NOTICE $nick :DCC Limit reached: Will send you pack %pack when a slot opens.
- putserv NOTICE $nick :You are in queue position $qlen of %maxqueue $+ .
- }
- }
- else psend $nick %pack
- }
- elseif ($2 == queue) putserv NOTICE $nick :Queue Length: $qlen / %maxqueue
- elseif ($2 == list) nlist $nick
- elseif ($2 == help) {
- putserv NOTICE $nick :/CTCP $me XDCC LIST - to get the list of offered packs.
- putserv NOTICE $nick :/CTCP $me XDCC LIST #<N> - to get more info on pack #<N>.
- putserv NOTICE $nick :/CTCP $me XDCC SEND #<N> - to send pack #<N>.
- }
- else putserv NOTICE $nick :Unrecognized request. Try /CTCP $me XDCC HELP.
- }
- on 1:SENDFAIL:* {
- if ($window(@Xdcc)) x.stat -u
- cs
- }
- on 1:FILESENT:* {
- if ($send($nick).cps isnum) {
- if (%lrecord !isnum) set %lrecord 0
- if ($send($nick).cps > %lrecord) {
- set %record $round($div($send($nick).cps,1000),1)
- set %lrecord $send($nick).cps
- iecho New record: $b($kps($send($nick).cps)) $+ k/s
- putserv NOTICE $nick :New record set by you at $b($kps($send($nick).cps)) $+ k/s!
- }
- }
- if ($window(@Xdcc)) x.stat -u
- cs
- }
- alias cs {
- set %i 0
- :start
- inc %i
- if ($send(%i)) {
- if ($send(%i).status == inactive) {
- close -s $send(%i)
- dec %i
- }
- goto start
- }
- qs
- }
- alias psend {
- if (($2 > %numpacks) || ($2 == $null) || ($send(0) >= %maxslots)) return
- qnotice $1 Ready to send $u(%filedesc [ $+ [ $2 ] ] ) $+ , you will need $b($alof($file(%file [ $+ [ $2 ] ] )).size)) free.
- inc %get [ $+ [ $2 ] ]
- .timer 1 %chsend checksend $1 $nopath(%file [ $+ [ $2 ] ] )
- if (%minsp [ $+ [ $2 ] ] != $null) .timer 1 50 checkspeed $1 $nopath(%file [ $+ [ $2 ] ] ) %minsp [ $+ [ $2 ] ]
- elseif (%msall == on) .timer 1 50 checkspeed $1 $nopath(%file [ $+ [ $2 ] ] ) %allspeed
- dcc send $1 %file [ $+ [ $2 ] ]
- }
- alias checksend {
- set %i 0
- :start
- inc %i
- if ($send(%i)) {
- if (($send(%i) == $1) && ($send(%i).file == $2) && ($send(%i).status == waiting)) {
- close -s $1 $2
- putserv NOTICE $1 :DCC send of $b($2) has timed out.
- iecho XDCC send of $sc($2) to $hc($1) has timed out.
- qs
- }
- else goto start
- }
- }
- alias tml {
- set %tml 0
- set %tmp01 0
- set %g 0
- :start
- inc %g
- if (%g <= %numpacks) {
- inc %tmp01 $mpy(%get [ $+ [ %g ] ] ,$file(%file [ $+ [ %g ] ] ).size)
- goto start
- }
- set %tml $round($div(%tmp01,1048576),1)
- unset %tmp01
- return %tml
- }
- alias tmo {
- set %i 0
- set %tmp.x 0
- :start
- inc %i
- if (%file [ $+ [ %i ] ] != $null) {
- inc %tmp.x $file(%file [ $+ [ %i ] ] ).size
- goto start
- }
- return $round($div(%tmp.x,1048576),1)
- }
- alias pmin {
- if (($2 == $null) || ($1 > %numpacks)) iecho Syntax: /pmin <pack #> <minspeed in kb/s or 0 to clear>
- elseif ($2 == 0) {
- unset %minsp [ $+ [ $1 ] ]
- iecho Removed minspeed for pack $hc($1) $+ .
- }
- else {
- set %minsp [ $+ [ $1 ] ] $mpy($2,1024)
- iecho Minspeed for Pack $1 $+ : $2 $+ kb/s.
- }
- }
- alias minspeed {
- if ($1 == 0) {
- set %msall off
- unset %allspeed
- iecho Removed minspeed.
- }
- elseif ($1 isnum) {
- set %msall on
- set %allspeed $mpy($1,1024)
- iecho Minspeed is now: $1 $+ kb/s
- }
- else iecho Syntax: /minspeed <minspeed in kb/s or 0 to clear>
- }
- alias doffer {
- unset %pack %nopath %ngets %qds %numpacks %num %showsum %tmp* %tmo %xc %g %tml %msall %allspeed %minsp* %file* %fcomment* %record %lrecord %get*
- window -c @Xdcc
- timoff %xdcc.timer1 xdcc.timer1
- .remove $tp(xstatus.txt)
- iecho All packs have been deleted.
- cq
- }
- alias addpack {
- if (%numpacks == $null) set %numpacks 0
- set %num $pls(1,%numpacks)
- set %get [ $+ [ %num ] ] 0
- set %filedesc [ $+ [ %num ] ] $$?="Pack Description for [ [ %num ] $+ ] :"
- set %fcomment [ $+ [ %num ] ] $?="Comment for [ %num ] (press cancel for none)"
- set %file [ $+ [ %num ] ] $$dir="Select File for Pack [ %num ] " *.*
- set %numpacks %num
- iecho Pack $hc(%num) has been added.
- unset %num
- }
- alias editpack {
- if ($1 == $null) {
- iecho Syntax: /editpack <pack #>
- return
- }
- set %num $1
- set %get [ $+ [ %num ] ] 0
- set %filedesc [ $+ [ %num ] ] $$?="Pack Description for [ [ %num ] $+ ] :"
- set %fcomment [ $+ [ %num ] ] $?="Comment for [ %num ] (press cancel for none)"
- set %file [ $+ [ %num ] ] $dir="Select File for Pack [ %num ] " *.*
- iecho Pack $hc(%num) has been edited.
- unset %num
- tmo
- }
- alias delpack {
- if ($1 == $null) iecho Syntax: /delpack <pack #>
- elseif ((%numpacks == 0) || (%numpacks == $null)) iecho You have no offer set.
- elseif ($1 > %numpacks) iecho You have only $hc(%numpacks) pack(s) offered.
- elseif (%numpacks == 1) doffer
- elseif ($1 == %numpacks) {
- unset %file [ $+ [ $1 ] ]
- unset %filedesc [ $+ [ $1 ] ]
- unset %get [ $+ [ $1 ] ]
- unset %fcomment [ $+ [ $1 ] ]
- dec %numpacks
- iecho Pack $hc($1) has been removed.
- }
- else {
- set %i $1
- :start
- inc %i
- if (%i <= %numpacks) {
- set %file [ $+ [ $sub(%i,1) ] ] %file [ $+ [ %i ] ]
- set %get [ $+ [ $sub(%i,1) ] ] %get [ $+ [ %i ] ]
- set %filedesc [ $+ [ $sub(%i,1) ] ] %filedesc [ $+ [ %i ] ]
- if (%fcomment [ $+ [ %i ] ] != $null) set %fcomment [ $+ [ $sub(%i,1) ] ] %fcomment [ $+ [ %i ] ]
- goto start
- }
- .save -rv vars.mrc
- unset %file [ $+ [ %numpacks ] ]
- unset %filedesc [ $+ [ %numpacks ] ]
- unset %get [ $+ [ %numpacks ] ]
- unset %fcomment [ $+ [ %numpacks ] ]
- dec %numpacks
- iecho Pack $hc($1) has been removed.
- }
- }
- alias nlist {
- if ((%numpacks == 0) || (%numpacks == $null)) {
- iecho You have no packs to offer.
- return
- }
- if ($1 == $null) {
- iecho $hc(NLIST) sent to $hc($active) at $hc($atime) $+ .
- sdcc putserv NOTICE $active
- }
- else {
- iecho $hc(NLIST) sent to $hc($1) at $hc($atime) $+ .
- sdcc putserv NOTICE $1
- }
- }
- alias plist {
- if ((%numpacks == 0) || (%numpacks == $null)) {
- iecho You have no packs to offer.
- return
- }
- if ($1 == $null) {
- iecho $hc(PLIST) sent to $active at $hc($atime) $+ .
- sdcc putserv PRIVMSG $active
- }
- else {
- iecho $hc(PLIST) sent to $hc($1) at $hc($atime) $+ .
- sdcc putserv PRIVMSG $1
- }
- }
- alias oplist {
- if ((%numpacks == 0) || (%numpacks == $null)) iecho You have no packs to offer.
- else {
- if ($1 == $null) {
- iecho $hc(NLIST) sent to $hc( [ $active ops ] ) at $hc($atime) $+ .
- sdcc xwall $active
- }
- else {
- iecho $hc(NLIST) sent to $hc( [ #$$1 ops ] ) at $hc($atime) $+ .
- sdcc xwall #$$1
- }
- }
- }
- alias xwall {
- if (%efnet.hybrid6) qnotice @ $+ $1 [ $+ %wall $+ : $+ $1 $+ ] $2-
- elseif ($me isop $1) .onotice # [ $+ %wall $+ : $+ $1 $+ ] $2-
- else {
- unset %tmp.xwall
- set %i.xwall 0
- :start
- inc %i.xwall
- if ($opnick($1,%i.xwall) != $null) {
- set %xtmp.wall $addtok(%tmp.xwall,$opnick($1,%i.xwall),44)
- goto start
- }
- mnotice %tmp.xwall [ $+ %wall $+ : $+ $1 $+ ] $2-
- }
- }
- alias sdcc {
- var %z
- if ($1 == putserv) set %z :
- $1- %z $+ Packs offered ( $+ %numpacks $+ ), '/CTCP $me xdcc HELP'
- if (%msall == on) $1- $z $+ Slots ( $+ $sub(%maxslots,$send(0)) $+ / $+ %maxslots $+ ) Queue ( $+ $qlen $+ / $+ %maxqueue $+ ) Min ( $+ $div(%allspeed,1024) $+ kb/s) Record ( $+ %record $+ kb/s)
- else $1- %z $+ Slots ( $+ $sub(%maxslots,$send(0)) $+ / $+ %maxslots $+ ) Queue ( $+ $qlen $+ / $+ %maxqueue $+ ) Record ( $+ %record $+ kb/s)
- set %num 0
- :start
- inc %num
- if (%num <= %numpacks) {
- $1- %z $+ ( $+ $lfix(2,$b(%num)) $+ ) [ $+ $lfix(3,%get [ $+ [ %num ] ] ) $+ x / $lfix(5,$alof($file(%file [ $+ [ %num ] ] ).size)) ] %filedesc [ $+ [ %num ] ]
- if (%fcomment [ $+ [ %num ] ] != $null) $1- %z $+ ^- %fcomment [ $+ [ %num ] ]
- goto start
- }
- if (%showsum == on) $1- %z $+ Total Offered ( $+ $tmo $+ m) Total Leeched ( $+ $tml $+ m)
- }
- alias checkspeed {
- if ($send($1).file == $2) {
- if ($send($1).status == waiting) {
- putserv NOTICE $1 :You have DCCs pending, please accept them.
- .timer 1 60 checkspeed $1-
- }
- elseif ($send(%i).cps < $3) {
- putserv NOTICE $1 :Sorry, XDCC send of $2 at $div($send(%i).cps,1024) $+ k/s is transferring too slowly (minimum $div($3,1024) $+ k/s), closing connection.
- close -s $1 $2
- if ($window(@Xdcc)) x.stat -u
- qs
- }
- }
- }
- alias xdccload {
- if ($1 == $null) iecho Syntax: /xdccload <offer name>
- elseif ($readini -n $td(xdcc.txt) $1 numpacks == $null) iecho No such offer in xdcc save.
- else {
- set %i 0
- if ($readini -n $td(xdcc.txt) $1 summary == on) set %showsum on
- else set %showsum off
- set %numpacks $readini -n $td(xdcc.txt) $1 numpacks
- :start
- inc %i
- if (%i > %numpacks) iecho XDCC offer $hc($1) has been loaded.
- else {
- set %file [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 file [ $+ [ %i ] ]
- set %filedesc [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 desc [ $+ [ %i ] ]
- set %get [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 get [ $+ [ %i ] ]
- if ($readini -n $td(xdcc.txt) $1 fc [ $+ [ %i ] ] == yes) set %fcomment [ $+ [ %i ] ] $readini -n $td(xdcc.txt) $1 comment [ $+ [ %i ] ]
- goto start
- }
- }
- }
- alias xdccsave {
- if ($1 == $null) iecho Syntax: /xdccsave <offer name>
- elseif ((%numpacks == 0) || (%numpacks == $null)) iecho No offer to save.
- else {
- set %i 0
- if (%showsum == on) writeini $td(xdcc.txt) $1 summary on
- writeini $td(xdcc.txt) $1 numpacks %numpacks
- :start
- inc %i
- if (%i > %numpacks) iecho XDCC offer $hc($1) has been saved.
- else {
- writeini $td(xdcc.txt) $1 file [ $+ [ %i ] ] %file [ $+ [ %i ] ]
- writeini $td(xdcc.txt) $1 get [ $+ [ %i ] ] %get [ $+ [ %i ] ]
- writeini $td(xdcc.txt) $1 desc [ $+ [ %i ] ] %filedesc [ $+ [ %i ] ]
- if (%fcomment [ $+ [ %i ] ] != $null) {
- writeini $td(xdcc.txt) $1 comment [ $+ [ %i ] ] %fcomment [ $+ [ %i ] ]
- writeini $td(xdcc.txt) $1 fc [ $+ [ %i ] ] yes
- }
- goto start
- }
- }
- }
- alias qs {
- if ($send(0) >= %maxslots) return
- set %i 0
- :start
- inc %i
- if (%i <= $qlen) {
- set %qs $read -nl [ $+ [ %i ] ] $tp(queue.txt)
- if ($send(0) < %maxslots) {
- psend %qs
- write -dl [ $+ [ %i ] ] $tp(queue.txt)
- dec %i
- }
- else {
- iecho $gettok(%qs,1,32) is in queue position %i of %maxqueue $+ .
- putserv NOTICE $gettok(%qs,1,32) :You are in queue position %i of %maxqueue $+ .
- }
- goto start
- }
- cs
- }
- alias pchannels {
- if ($1 ischan) {
- .timer 0 %tc plist $1
- if ($1 == $null) iecho Sending PLIST to all channels every $hc($div(%tc,60)) minutes.
- else iecho Sending PLIST to $hc($1) every $hc($div(%tc,60)) minutes.
- }
- else {
- .timer 0 %tc plist $?="Enter channel to send plist to (cancel for all):"
- if ($! == $null) iecho Sending PLIST to all channels every $hc($div(%tc,60)) minutes.
- else iecho Sending PLIST to $hc($!) every $hc($div(%tc,60)) minutes.
- }
- }
- alias pmsg {
- set %pmsg $?="Enter channel to send pmsg to (cancel for all)"
- if (%pmsg == $null) set %pmg $mychans
- else set %pmg %pmsg
- .timer 0 %tc poffer %pmg is offering $b(%numpacks) pack(s). Type '/CTCP $me XDCC LIST' for a complete listing.
- if (%pmsg == ame) iecho Sending offer message to all channels every $hc($div(%tc,60)) minutes.
- else iecho Sending offer message to $hc($!) every $hc($div(%tc,60)) minutes.
- unset %pmg %pmsg
- }
- alias poffer describe $1-
- alias poff {
- if ($1) {
- set %i 0
- :start
- inc %i
- if ($timer(%i)) {
- if (($timer(%i).com == plist $1) || ($timer(%i).com == poffer $1)) {
- timoff $timer(%i)
- iecho $upper($gettok($timer(%i).com,1,32)) timer for $hc($1) has been halted.
- }
- else goto start
- }
- else iecho Unable to locate PLIST timer for $hc($1) $+ .
- }
- else {
- set %i 0
- :start
- inc %i
- if ($timer(%i)) {
- if (($gettok($timer(%i).com,1,32) == plist) || ($gettok($timer(%i).com,1,32) == poffer)) {
- iecho $upper($gettok($timer(%i).com,1,32)) timer for $hc($gettok($timer(%i).com,2,32)) has been halted.
- timoff $timer(%i)
- }
- goto start
- }
- }
- }
- alias xview {
- if ((%numpacks == 0) || (%numpacks == $null)) iecho You have no packs offered.
- else {
- window -a @Xview %xvloc @Xview
- sdcc aline @Xview á
- }
- }
- alias xstatus {
- if ($1 == on) {
- set %xstatus on
- .timer 0 3 if ($send(0)) x.stat -u
- set %xdcc.timer1 $ltimer
- x.stat -i
- }
- elseif ($1 == off) {
- set %xstatus off
- if ($window(@Xdcc)) set %xloc $swlc(@Xdcc)
- window -c @Xdcc
- timoff %xdcc.timer1 xdcc.timer1
- }
- else iecho Syntax: /xstatus <on|off>
- }
- alias x.stat {
- if ($1 == -i) {
- if ($window(@Xdcc)) return
- window -albdo @Xdcc %xloc @Xdcc Courier New 11
- aline @Xdcc $fix(2,$chr(35)) $fix(10,Nick) Pack $fix(5,Speed) P% Timeleft Elapsed
- set %i 0
- :start
- inc %i
- if (%i <= %maxslots) {
- if (($send(%i)) && ($send(%i).status == active)) aline @Xdcc %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,$kps($send(%i).cps)) $lfix(2,$send(%i).pc) $center(8,$rsc($duration($div($sub($send(%i).size,$d.s($send(%i).sent)),$d.s($send(%i).cps))))) $center(8,$rsc($duration($div($d.s($send(%i).sent),$d.s($send(%i).cps)))))
- elseif ($send(%i)) aline @Xdcc %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,0.00) $lfix(2,0) $str(0,3) $send(%i).status
- else aline @Xdcc %i $+ . $str( ,7) empty $str( ,10) slot
- goto start
- }
- else sline @Xdcc 2
- }
- elseif ($1 == -u) {
- if ($window(@Xdcc) == $null) {
- timoff %xdcc.timer1 xdcc.timer1
- return
- }
- set %i 0
- :start
- inc %i
- if (%i <= %maxslots) {
- if (($send(%i)) && ($send(%i).status == active)) rline @Xdcc $pls(%i,1) %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,$kps($send(%i).cps)) $lfix(2,$send(%i).pc) $center(8,$rsc($duration($div($sub($d.s($send(%i).size),$d.s($send(%i).sent)),$d.s($send(%i).cps))))) $center(8,$rsc($duration($div($d.s($send(%i).sent),$d.s($send(%i).cps)))))
- elseif ($send(%i)) rline @Xdcc $pls(%i,1) %i $+ . $fix(10,$send(%i)) $fix(4,$x.file($send(%i).file)) $lfix(5,0.00) $lfix(2,0) $str(á,3) $send(%i).status
- else rline @Xdcc $pls(%i,1) %i $+ . $str(á,7) empty $str(á,10) slot
- goto start
- }
- else sline @Xdcc 2
- }
- }
- alias x.file {
- set %j 0
- :start
- inc %j
- if (%j <= %numpacks) {
- if ($nopath(%file [ $+ [ %j ] ] ) == $1) return %j
- goto start
- }
- return n/a
- }
- alias timelimit set %chsend $mpy(60,$$1) | iecho XDCC Send Timeout set to $hc($1) minutes.
- alias maxslots set %maxslots $$1 | iecho Maximum slots set to $hc($1) slots.
- alias qmax set %maxqueue $$1 | iecho Queue size set to $hc($1) slots.
- alias ptime set %tc $mpy($$1,60) | iecho PLIST timer set to every $hc($1) minutes.
- alias cq write -c $tp(queue.txt)
- alias qlen return $iif($isfile($tp(queue.txt)),$lines($tp(queue.txt)),0)
- menu @Xdcc {
- dclick if ($send($sub($1,1))) close -s $send($sub($1,1)) $send($sub($1,1)).file
- exit { set %xloc $swlc(@Xdcc) | window -c @Xdcc | timoff %xdcc.timer1 xdcc.timer1 }
- }
- menu @Xview {
- dclick { set %xvloc $swlc(@Xview) | window -c @Xview }
- exit { set %xvloc $swlc(@Xview) | window -c @Xview }
- }
- menu Channel {
- xdcc
- .offer
- ..msg
- ...all channels { plist $mychans }
- ...current chan { plist }
- ..notice
- ...all channels { nlist $mychans }
- ...current chan { nlist }
- ..-
- ..timed msg
- ...select { pmsg }
- ...-
- ...disable
- ....all { poff }
- ....one { poff $$?="Enter channel:" }
- ..timed offer
- ...select { pchannels }
- ...-
- ...disable
- ....all { poff }
- ....one { poff $$?="Enter channel:" }
- .setup
- ..new offer { offer }
- ..add pack { addpack }
- ..dele pack { delpack $$?="Pack number to edit" }
- ..edit pack
- ...description { xdcc desc $$?="pack number to edit:" }
- ...comment { xdcc note $$?="pack number to edit:" }
- ...minspeed { pmin $$?="pack number" $$?="minspeed in kb/s" }
- ...change file { xdcc file $$?="pack number to edit:" }
- ...-
- ...edit whole { editpack $$?="Pack number to edit" }
- ..view offer { xview }
- ..-
- ..queue { qmax $$?="queue size:" }
- ..time limit { timelimit $$?="time limit in minutes:" }
- ..max slots { maxslots $$?="maximum slots:" }
- ..msg delay { ptime $$?="delay in minutes:" }
- ..$toggled(%msall) minspeed { minspeed $iif(%msall == off,$$?="minspeed in kb/s:",0) }
- ..$toggled(%showsum) summary { toggle showsum }
- ..-
- ..load offer { xdccload $$?="Enter offer name to load:" }
- ..save offer { xdccsave $$?="Enter offer name to save:" }
- ..-
- ..clear offer { doffer }
- .$toggled(%xstatus) status { xstatus $toggler(%xstatus) }
- }
-